Nieuwe lettertypes toevoegen en ondersteuning voor codering

Deze tutorial toont hoe U TrueType of Type1 lettertypes kunt gebruiken zodat U niet meer gelimiteerd bent tot de standaard lettertypes. Een ander voordeel is dat U de codering van het lettertype kan kiezen, waarmee het mogelijk wordt andere talen dan de Westerse te gebruiken (de standaard lettertypes hebben te weinig beschikbare tekens).

Er zijn twee manieren om een nieuw lettertype te gebruiken: Het in de PDF invoegen of niet. Wanneer het lettertype is ingevoegd, wordt het gezocht in het systeem. Het voordeel is dat het PDF bestand kleiner is; er zal echter, als deze niet beschikbaar is, een vervangingslettertype gebruikt worden. De voorkeur is dus zeker te zijn dat het betreffende lettertype geïnstalleerd is op de client systemen. Als het bestand voor een groot publiek bestemd is, is het beter deze in te voegen in het bestand.

Om een lettertype toe te voegen zijn er drie stappen nodig voor TrueTypes: Voor Type1 is de eerste theoretisch niet noodzakelijk omdat het AFM bestand meestal met het lettertype geleverd wordt. Het het geval dat U alleen een metric bestand in PFM formaat heeft, kunt u de convertor hier downloaden.

Het aanmaken van het metric bestand

De eerste stap voor een TrueType bestaat uit het aanmaken van het AFM bestand. Een programma bestaat om deze taak uit te voeren: ttf2pt1. Het Windows binary bestand is hier beschikbaar. De commando regel om het te gebruiken is als volgt:

ttf2pt1 -a font.ttf font

Bijvoorbeeld, voor Comic Sans MS Standaard:

ttf2pt1 -a c:\windows\fonts\comic.ttf comic

Er worden twee bestanden aangemaakt; de ene waar we geïnteresseerd in zijn is comic.afm.

Het aanmaken van het lettertype definitie bestand

De tweede stap bestaat uit het genereren van een PHP bestand dat alle informatie dat nodig is voor FPDF bevat; Daarnaast wordt het lettertype bestand gecomprimeerd. Om dit te doen The second step consists in generating a PHP file containing all the information needed by FPDF; Om dit te doen is een hulp script bijgeleverd in de font/makefont/ directory van het pakket: makefont.php. Het bevat de volgende functie:

MakeFont(string fontfile, string afmfile [, string enc [, array patch [, string type]]])

fontfile
Path naar het .ttf of .pfb bestand.
afmfile
Path naar het .afm bestand.
enc
Naam van de codering die gebruikt moet worden. Standaard waarde: cp1252.
patch
Optionele modificatie van de codering. Standaard leeg.
type
Type lettertype (TrueType of Type1). Standaard waarde: TrueType.

De eerste parameter is de naam van het lettertype bestand. De extensie moet .ttf of .pfb zijn en bepaalt het type van het lettertype. Als U een over een Type1 lettertype in ASCII formaat (.pfa) beschikt, kunt U het converteren naar binary formaat met t1utils.
Als U geen lettertype wilt invoegen, geef dan een lege string op. In dit geval wordt het type gegeven door het type parameter.
Opmerking: In het geval dat een lettertype dezelfde naam heeft als een standaard naam, bijvoorbeeld arial.ttf, is het noodzakelijk deze in te voegen. Zo niet, zal Acrobat het eigen letterype gebruiken.

Het AFM bestand is degene die eerder is gegenereerd.

De codering defineert de associatie met de code (van 0 tot 255) en een teken. De eerste 128 staan vast en komen overeen met ASCII. De daaropvolgenden zijn variabelen. De coderingen worden opgeslagen in .map bestanden. De volgende zijn beschikbaar: Natuurlijk moet het lettertype de tekens bevatten die met de codering overeenkomen.
In het bijzondere geval van een lettertype met symbolen (wat betekent dat het geen letters bevat, zoals Symbol of ZapfDingbats), kunt U een lege string opgeven.
De coderingen die beginnen met cp worden gebruikt door windows; Linux systemen gebruiken meestal ISO.
Opmerking: Standaard lettertypes gebruiken cp1252.

De vierde parameter geeft de mogelijkheid om de codering te wijzigen. Soms is het handig over de mogelijkheid te beschikken om sommige tekens te wijzigen. Een voorbeeld. ISO-8859-1 bevat geen euro symbool. Als U het wilt toevoegen op positie 164, geef dan array(164=>'Euro') op.

De laatste parameter wordt gebruikt om het type van het lettertype in te stellen wanneer dit niet ingevoegd is (met andere woorden, wanneer de eerste parameter leeg is).

Nadat U de functie heeft aangeroepen (maak een nieuw bestand hiervoor aan en voeg de makefont.php er in, of voeg de aanroep direct toe in het bestand), wordt een .php bestand aangemaakt, wat de zelfde naam heeft als het .afm bestand. U kunt het hernoemen als U wilt. In het geval dat het lettertype is ingevoegd in het bestand, wordt het lettertype bestand gecompresseerd en wordt een tweede bestand met .z als extensie aangemaakt (behalve wanneer de compressie functie niet beschikbaar is, dit vereist zlib). Deze kunt U ook hernoemen, maar U dient dan ook de variabele $file in het .php bestand op de zelfde manier te wijzigen.

Voorbeeld:

MakeFont('c:\\windows\\fonts\\comic.ttf','comic.afm','cp1252');

Dit geeft U de bestanden comic.php en comic.z.

Dan dient U de gegenereerde bestanden in de font directory. Het het bestand niet gecompresseerd moet worden, kopiëer dan het .ttf of het .pfb bestand in plaats van het .z bestand.

Declaratie van het lettertype in het script

De laatste stap is de meest eenvoudige. U moet de AddFont() methode aanroepen. Een voorbeeld:

$pdf->AddFont('Comic','','comic.php');

of eenvoudig:

$pdf->AddFont('Comic');

En het lettertype is nu beschikbaar in standaard en onderstreepte stijlen, bruikbaar als de anderen. Als we hadden gewerkt met Comic Sans MS vET (comicbd.ttf), hadden we het volgende gebruikt:

$pdf->AddFont('Comic','B','comicbd.php');

Voorbeeld

Laten we nu een klein maar compleet voorbeeld bekijken. Het gebruikte lettertype is Calligrapher, beschikbaar op www.abstractfonts.com (een site die diverse gratis TrueType lettertypes aanbiedt). De eerste stap is de generatie van het AFM bestand:

ttf2pt1 -a calligra.ttf calligra

wat calligra.afm geeft (en calligra.t1a die we kunnen verwijderen). Daarna maken we het definitiebestand aan:

<?php
require('font/makefont/makefont.php');

MakeFont('calligra.ttf','calligra.afm');
?>

De functie geeft het volgende weer:

Warning: character Euro is missing
Warning: character Zcaron is missing
Warning: character zcaron is missing
Warning: character eth is missing
Font file compressed (calligra.z)
Font definition file generated (calligra.php)

Het euro teken is niet aanwezig in het lettertype (het is te oud). Er zijn ook drie andere tekens missend, maar daar waren we toch niet in geïnteresseerd.
We kunnen nu de twee nieuwe bestanden in de directory met lettertypes kopiëren en het script schrijven:

<?php
require('fpdf.php');

$pdf=new FPDF();
$pdf->AddFont('Calligrapher','','calligra.php');
$pdf->AddPage();
$pdf->SetFont('Calligrapher','',30);
$pdf->Cell(0,10,'Geniet van nieuwe lettertypes met FPDF!');
$pdf->Output();
?>

Over het euro symbool

Het euro teken is niet aanwezig in alle coderingen, en is niet altijd op de zelfde positie geplaatst:

EncodingPositie
cp1250128
cp1251136
cp1252128
cp1253128
cp1254128
cp1255128
cp1257128
cp1258128
cp874128
ISO-8859-1afwezig
ISO-8859-2afwezig
ISO-8859-4afwezig
ISO-8859-5afwezig
ISO-8859-7afwezig
ISO-8859-9afwezig
ISO-8859-11afwezig
ISO-8859-15164
ISO-8859-16164
KOI8-Rafwezig
KOI8-Uafwezig

ISO-8859-1 is uitgebreid maar beschikt niet over een euro teken. Als U het nodig heeft is de eenvoudigste oplossing om cp1252 of ISO-8859-15 te gebruiken, welke bijna gelijk zijn maar het waardevolle symbool wel bevatten.
Ook bij ISO-8859-2 is het mogelijk om ISO-8859-16 te gebruiken, maar hierin kunnen enkele verschillen in zitten. Het is daarom eenvoudiger om de codering aan te passen en het euro teken toe te voegen, zoals hierboven uitgelegd is. Hetzelfde geldt voor andere coderingen.

Constructie van Lettertypes onder Windows

Wanneer een TrueType lettertype niet beschikbaar is in een bepaalde stijl kan windows het construeren van de normale verise. Een voorbeeld. Er bestaat geen Comic Sans MS Cursief, maar het kan worden opgebouwd uit Comic Sans MS Standaard. Deze functie kan worden gebruikt in een PDF bestand, maar het vereist dat het lettertype beschikbaar is op het systeem (U moet het niet in het document invoegen). Hier staat hoe U dit doet: Bijvoorbeeld, voor het bestand comici.php:

$name='ComicSansMS,Italic';

Het kan dan normaal worden gebruikt:

$pdf->AddFont('Comic','I','comici.php');

De grootte van Truetype bestanden reduceren

Lettertype bestanden zijn meestal aardig aan de grote kant (meer dan 100, zelfs 200kb); Dit is door het feit dat ze tekens die corresponderen met veel coderingen bevatten. zlib compressie verkleint de bestanden aardig maar ondanks dit blijven de bestanden redelijk groot. Er bestaat een techniek om deze verder te reduceren. Het bestaat uit het converteren van het bestand naar een Type1 formaat met ttf2pt1 door de codering waar U in geïnteresseerd bent op te geven; alle andere tekens zullen worden verwijderd.
Een voorbeeld. Het arial.ttf lettertype wordt in Windows 98 geleverd met een grootte van 267KB (het bevat 1296 tekens). Na compressie blijft het bestand redelijk groot, namelijk 147kb. Laten we het converteren naar Type1 door alleen de cp1250 tekens te behouden:

ttf2pt1 -b -L cp1250.map c:\windows\fonts\arial.ttf arial

De .map kunnen worden gevonden in de font/makefont/ directory van het pakket. Het commando maakt arial.pfb en arial.afm aan. Het arial.pfb bestand is slechts 35KB, en 30KB na compressie.

Het is mogelijk om zelfs nog verder te gaan. Als U alleen geïnteresseerd bent in een kleine set tekens (U zult waarschijnlijk niet alle 217 karakters nodig hebben), kunt U het .map bestand openen en de regels weghalen waar U niet in geïnteresseerd bent. Afhankelijk hiervan zal de bestandsgrootte ook dalen.